import request from "@/utils/request";

const LEADERBOARD_BASE_URL = "/api/v1/game/leaderboard";

/**
 * 排行榜周期类型
 */
export type LeaderboardPeriod = "daily" | "weekly" | "monthly" | "all";

/**
 * 排行榜玩家信息
 */
export interface RankPlayer {
  /** 用户ID */
  id: number;
  /** 用户名 */
  username: string;
  /** 用户头像 */
  avatar: string;
  /** 积分 */
  points: number;
  /** 等级 */
  level: number;
  /** 排名趋势变化 */
  trend: number;
}

/**
 * 我的排名信息
 */
export interface MyRankInfo extends RankPlayer {
  /** 排名 */
  rank: number;
}

/**
 * 用户资料表单
 */
export interface UserProfileForm {
  /** 用户ID */
  userId: number;
  /** 用户名 */
  username: string;
  /** 头像 */
  avatar?: string;
}

const LeaderboardAPI = {
  /**
   * 获取排行榜列表
   *
   * @param period 时间段（日榜/周榜/月榜/总榜）
   * @returns 排行榜玩家列表
   */
  getRankList(period: LeaderboardPeriod) {
    return request<any, RankPlayer[]>({
      url: `${LEADERBOARD_BASE_URL}`,
      method: "get",
      params: { 
        period, 
        limit: 10 // 限制返回数量
      }
    });
  },

  /**
   * 获取当前用户的排名信息
   *
   * @param period 时间段（日榜/周榜/月榜/总榜）
   * @returns 当前用户的排名信息
   */
  getMyRank(period: LeaderboardPeriod) {
    return request<any, MyRankInfo>({
      url: `${LEADERBOARD_BASE_URL}/user-rank`,
      method: "get",
      params: { period }
    });
  },

  /**
   * 更新用户资料
   *
   * @param data 用户资料表单
   * @returns 是否成功
   */
  updateUserProfile(data: UserProfileForm) {
    return request<any, boolean>({
      url: `${LEADERBOARD_BASE_URL}/user-profile`,
      method: "put",
      data
    });
  }
};

export default LeaderboardAPI;
